home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbpxen / pxmodule.bas < prev    next >
BASIC Source File  |  1991-10-07  |  14KB  |  417 lines

  1. '
  2. '  Written by Steve Jackson 
  3. '             9152 Brabham Drive
  4. '             Huntington Beach, CA 92646
  5. '
  6. '  Thanks to John Jaster for some of the dll definitions
  7. '
  8. '  Most of the engine functions are defined here, but not all.
  9. '  One that I have not gotten to work is PxErrMsg because it returns
  10. '  a pointer.  Visual Basic has no pointer types (that I know of).  
  11. '  You might get it to work by get a pointer to windows memory and
  12. '  using that, but it is beyond me right now.
  13. '
  14. '  This module is meant to be a general purpose visual basic interface
  15. '  to the Paradox engine DLL.  To run it, you need the DLL from Paradox
  16. '  Engine.  An example of usage is distributed in little video rental 
  17. '  application called VVDEMO.  
  18. '
  19. '  Comments, questions are welcome.  If you know of any ways I can
  20. '  earn a little extra income to purchase a faster computer (and with
  21. '  more memory) that would be welcome too.
  22. '******* Declarations for Using the Paradox 3.5 Engine ******
  23. Declare Function PXWinInit Lib "Pxengwin.dll" (ByVal Application$, ByVal Mode%) As Integer
  24. Declare Function PXExit Lib "Pxengwin.dll" () As Integer
  25. '************ TABLE FUNCTIONS *****************
  26. Declare Function PXTblOpen Lib "Pxengwin.dll" (ByVal TblName$, TblHnd%, ByVal index%, ByVal change%) As Integer
  27. Declare Function PXTblClose Lib "Pxengwin.dll" (ByVal TblHnd%) As Integer
  28. '************* RECORD FUNCTIONS *******************
  29. Declare Function PXRecAppend Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal RecHnd%) As Integer
  30. Declare Function PXRecInsert Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal RecHnd%) As Integer
  31. Declare Function PXRecUpdate Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal RecHnd%) As Integer
  32. Declare Function PXRecDelete Lib "Pxengwin.dll" (ByVal TblHnd%) As Integer
  33. Declare Function PXRecBufOpen Lib "Pxengwin.dll" (ByVal TblHnd%, RecHnd%) As Integer
  34. Declare Function PXRecBufClose Lib "Pxengwin.dll" (ByVal RecHnd%) As Integer
  35. Declare Function PXRecBufEmpty Lib "Pxengwin.dll" (ByVal RecHnd%) As Integer
  36. Declare Function PXRecGet Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal RecHnd%) As Integer
  37. Declare Function PXRecFirst Lib "Pxengwin.dll" (ByVal TblHnd%) As Integer
  38. Declare Function PXRecLast Lib "Pxengwin.dll" (ByVal TblHnd%) As Integer
  39. Declare Function PXRecNext Lib "Pxengwin.dll" (ByVal TblHnd%) As Integer
  40. Declare Function PXRecPrev Lib "Pxengwin.dll" (ByVal TblHnd%) As Integer
  41. Declare Function PXRecNum Lib "Pxengwin.dll" (ByVal TblHnd%, RecNum%) As Integer
  42. Declare Function PXTblNRecs Lib "Pxengwin.dll" (ByVal TblHnd%, nRecs%) As Integer
  43. '**************** FIELD FUNCTIONS ****************
  44. Declare Function PXPutShort Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, ByVal sValue%) As Integer
  45. Declare Function PXPutDoub Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, ByVal dValue#) As Integer
  46. Declare Function PXPutLong Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, ByVal lValue&) As Integer
  47. Declare Function PXPutAlpha Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, ByVal aValue$) As Integer
  48. Declare Function PXPutBlank Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%) As Integer
  49. Declare Function PXPutDate Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, ByVal inDate As Any) As Integer
  50. Declare Function PXGetShort Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, sValue%) As Integer
  51. Declare Function PXGetDoub Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, dValue#) As Integer
  52. Declare Function PXGetLong Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, lValue&) As Integer
  53. Declare Function PXGetAlpha Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, ByVal bufSize%, ByVal aValue$) As Integer
  54. Declare Function PXFldBlank Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, Blank%) As Integer
  55. Declare Function PXGetDate Lib "Pxengwin.dll" (ByVal RecHnd%, ByVal FldHnd%, outDate As Any) As Integer
  56. Declare Function PXRecNFlds Lib "Pxengwin.dll" (ByVal TblHnd%, nFlds%) As Integer
  57. Declare Function PXFldHandle Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal FldName$, FldHnd%) As Integer
  58. Declare Function PXFldType Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal FldHnd%, ByVal BufSiz%, ByVal fldtype$) As Integer
  59. Declare Function PXFldName Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal FldHnd%, ByVal BufSiz%, ByVal FldName$) As Integer
  60. '*************** SEARCH FUNCTIONS *******************
  61. Declare Function PXSrchKey Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal RecHnd%, ByVal nFlds%, ByVal Mode%) As Integer
  62. Declare Function PXSrchFld Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal RecHnd%, ByVal FldNum%, ByVal Mode%) As Integer
  63. '***************** MISCELLANEOUS FUNCTIONS ****************
  64. Declare Function PXDateDecode Lib "Pxengwin.dll" (ByVal outDate As Any, mm%, dd%, yy%) As Integer
  65. Declare Function PXDateEncode Lib "Pxengwin.dll" (ByVal mm%, ByVal dd%, ByVal yy%, pDate&) As Integer
  66. ' note: PXErrMsg returns a string, not an integer
  67. Declare Function PXErrMsg Lib "Pxengwin.dll" (ByVal error_code%) As String
  68. '******************* NETWORK FUNCTIONS ******************
  69. Declare Function PXNetUserName Lib "Pxengwin.dll" (ByVal buffer%, UserName$) As Integer
  70. Declare Function PXNetFileLock Lib "Pxengwin.dll" (ByVal FileName$, ByVal lockType%) As Integer
  71. Declare Function PXNetFileUnlock Lib "Pxengwin.dll" (ByVal FileName$, ByVal lockType%) As Integer
  72. Declare Function PXNetTblLock Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal lockType%) As Integer
  73. Declare Function PXNetTblUnlock Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal lockType%) As Integer
  74. Declare Function PXNetRecLock Lib "Pxengwin.dll" (ByVal TblHnd%, LockHnd%) As Integer
  75. Declare Function PXNetRecUnlock Lib "Pxengwin.dll" (ByVal TblHnd%, ByVal LockHnd%) As Integer
  76. Declare Function PXNetRecLocked Lib "Pxengwin.dll" (ByVal TblHnd%, Locked%) As Integer
  77. Declare Function PXNetTblChanged Lib "Pxengwin.dll" (ByVal TblHnd%, Changed%) As Integer
  78. Declare Function PXNetTblRefresh Lib "Pxengwin.dll" (ByVal TblHnd%) As Integer
  79. '
  80. ' Variables used only in this module
  81. '
  82. ' What must be defined in global:  NUMBER_OF_TABLES
  83. '
  84. '
  85. Dim hTable(NUMBER_OF_TABLES) As Integer
  86. Dim hRecBuf(NUMBER_OF_TABLES) As Integer
  87. Dim hRecLock(NUMBER_OF_TABLES) As Integer
  88. Dim iTableIsClosed(NUMBER_OF_TABLES) As Integer
  89.  
  90. Dim alpha_field As String * 256
  91. Dim px As Integer
  92.  
  93. Const PX_OK = 0
  94. Const PX_ENDOFTABLE = 101
  95. Const PX_STARTOFTABLE = 102
  96. Const PX_RECNOTFOUND = 89
  97. Const PX_KEYVIOL = 97
  98. Const PX_RECDELETED = 50
  99. Const PX_RECLOCKED = 9
  100.  
  101. Sub PXError (ByVal error_code As Integer)
  102.     '
  103.     '  General purpose error trapping.
  104.     '  If the error is not critical (that is, the database is OK),
  105.     '  return to the user.  Store message that they can retrieve if
  106.     '  needed by calling dberrormsg().
  107.     '
  108.     '  If the error is critical, processing cannot continue, and
  109.     '  this routine will END THE PROGRAM
  110.     '
  111.     If error_code = PX_OK Then
  112.         Exit Sub
  113.     End If
  114.     '
  115.     '   Non-critical errors:
  116.     '
  117.     Select Case error_code
  118.         Case PX_OK
  119.             Exit Sub
  120.         Case PX_ENDOFTABLE, PX_STARTOFTABLE, PX_KEYVIOL
  121.             Exit Sub
  122.         Case PX_RECNOTFOUND, PX_RECDELETED
  123.             Exit Sub
  124.     End Select
  125.  
  126.     Msg$ = "Paradox database error code: " + Str$(error_code)
  127.     ' alpha_field = PXErrMsg(error_code)
  128.     ' Msg$ = Msg$ + alpha_field
  129.     MsgBox Msg$, 0 + 16, "Database Error"
  130.     End
  131. End Sub
  132.  
  133. Function DBInit (ByVal AppName$) As Integer
  134.     '
  135.     ' Start the paradox engine for windows
  136.     ' for now always use mode of: PXSHARED
  137.     '
  138.     px = PXWinInit(AppName$, 2)
  139.     If px = 82 Then
  140.         DBInit = PX_OK
  141.         Exit Function
  142.     End If
  143.  
  144.     If px Then
  145.         Msg$ = "Unable to start Paradox engine, code: " + Str$(px)
  146.         Msg$ = Msg$ + " Remember to type SHARE before starting Windows"
  147.         MsgBox Msg$, 0 + 16, "Database Initialization"
  148.         End
  149.     End If
  150.  
  151.     DBInit = PX_OK
  152. End Function
  153.  
  154. Function DBExit () As Integer
  155.     '
  156.     '  Shutdown the paradox engine
  157.     '
  158.     DBExit = PXExit()
  159. End Function
  160.  
  161. Function TableOpen (ByVal Tblnum%, ByVal TblName$)
  162.     '
  163.     '  Open a table and allocate one record buffer for it.
  164.     '  Application calls this ro